1. Field of the Invention
Embodiments of the present invention relate to decoding variable length codes (VLC) used in Joint Photographic Experts Group (JPEG) image files.
2. Related Art
In computing applications, variable length coding (VLC) encoding schemes allow for lossless data compression. In general, VLC encoding schemes utilize a probabilistic approach, where the more common symbols require fewer bits to express than the less common symbols. VLC encoding is used extensively throughout computing, and particularly in media applications, such as images, music, and video, where the uncompressed information would require far more storage space than a compressed version.
One VLC encoding scheme is Huffman coding. Huffman coding is an extremely efficient means of compressing data, particularly when the item to be compressed is used to help generate the corresponding Huffman tree, by using the occurrence of values within the source material to determine where in the Huffman tree each symbol value should appear. Huffman coding also offers an advantage, in that it generates prefix free codes, sometimes called prefix codes; that is, no symbol generated by a Huffman tree will correspond to a prefix of any other symbol generated by that Huffman tree.
Huffman coding is used extensively throughout media applications, and in particular in the Joint Photographic Experts Group (JPEG) image file format. Every JPEG uses Huffman coding to compress data, and, correspondingly, every JPEG viewer must process the Huffman coding to decompress the image. The more efficiently a JPEG viewer can process Huffman coding, the faster the decoding process.
The JPEG standard allows for different Huffman tables for every image. The frequency of occurrence of every value in the image is determined, and those frequencies are used to generate unique Huffman tables for that image. As such, in order for a viewer to decode a JPEG image, the necessary information to reconstruct the Huffman tables is included in the file itself, as part of the file header.